﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Jäckvik_Grupp4
{
    //Gränssnitt för administrationen
    public partial class Admin : Form
    {
        private LOGIC.LogicBudget budget = new LOGIC.LogicBudget();
        private LOGIC.LogicStaff staff = new LOGIC.LogicStaff();
        private LOGIC.LogicPrivateGuest privateGuest = new LOGIC.LogicPrivateGuest();
        private LOGIC.LogicCompanyGuest companyGuest = new LOGIC.LogicCompanyGuest();
        private LOGIC.LogicLodging curLodging = new LOGIC.LogicLodging();
        private LOGIC.LogicConference curConference = new LOGIC.LogicConference();
        private LOGIC.LogicEquipment equipment = new LOGIC.LogicEquipment();
        private LOGIC.LogicSkiclass skiclass = new LOGIC.LogicSkiclass();
        private LOGIC.LogicErrorhandling errorhand = new LOGIC.LogicErrorhandling();
        

        public Admin()
        {
            InitializeComponent();            
            FillWeekAndYearCombos();
            FillTables();
            LOGIC.LogicStaff staff = new LOGIC.LogicStaff();
            int staffID = LOGIC.LogicSession.TheSession.ActiveUser;
            staff = LOGIC.LogicStaff.CheckLevel(staffID);
            if (staff.Behörighet == "3")
            {
                tabControl_Ad.SelectedTab.Dispose();
            }
        }

        /// <summary>
        /// Fyller combobox för år i budget samt sätter vecka till den vecka man är i där detta är relevant
        /// </summary>
        private void FillWeekAndYearCombos()
        {
            comboBox_AdmYearBudget.Items.Add(DateTime.Now.Year);
            comboBox_AdmYearBudget.Items.Add(DateTime.Now.Year + 1);
            comboBox_AdmYearBudget.Items.Add(DateTime.Now.Year + 2);
            comboBox_AdmStatYear.Items.Add(DateTime.Now.Year);
            comboBox_AdmStatYear.Items.Add(DateTime.Now.Year + 1);
            comboBox_AdmWeekBudget.Text = budget.GetWeekFromDate(DateTime.Now).ToString();
            comboBox_AdmFromWeekStat.Text = budget.GetWeekFromDate(DateTime.Now).ToString();
            comboBox_AdmToWeekStat.Text = budget.GetWeekFromDate(DateTime.Now).ToString();
        }

        /// <summary>
        /// Fyller datagridview - användare, privatgäst och företags gäst med information.
        /// </summary>
        public void FillTables()
        {
            dataGridView_AdUser.DataSource = staff.GetaAllStaff();
            dataGridView_AdPGuest.DataSource = privateGuest.GetPrGuests();
            dataGridView_AdCoGuest.DataSource = companyGuest.GetAllCoGuests();
        }



        //********************************************************************************* Användare **********************************************************************************//
        #region
        /// <summary>
        /// Söker på valt alternativ i listan över personal
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdUserSearch_Click(object sender, EventArgs e)
        {
            try
            {
                if (comboBox_AdUserAlt.SelectedIndex == -1)
                {
                    MessageBox.Show("Du måste välja ett sökalternativ"); 
                }
                else if (comboBox_AdUserAlt.SelectedIndex == 0) //Söker på användare via personalID
                {
                    int tempId = int.Parse(textBox_AdUserSearch.Text);
                    dataGridView_AdUser.DataSource = staff.GetStaffById(tempId);
                    textBox_AdUserSearch.Text = "";
                }
                else if (comboBox_AdUserAlt.SelectedIndex == 1) //Söker på användare via förnamn
                {
                    string tempFName = textBox_AdUserSearch.Text;
                    dataGridView_AdUser.DataSource = staff.GetStaffByFName(tempFName);
                    textBox_AdUserSearch.Text = "";
                }
                else if (comboBox_AdUserAlt.SelectedIndex == 2) //Söker på användare via efternamn
                {
                    string tempLName = textBox_AdUserSearch.Text;
                    dataGridView_AdUser.DataSource = staff.GetStaffByLName(tempLName);
                    textBox_AdUserSearch.Text = "";
                }
         
            }
            catch (Exception)
            {
                MessageBox.Show("Felaktigt värde");
            }
        }

        /// <summary>
        /// För över vald användares uppgifter i matchande textboxar vid dubbelklickning.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_AdUser_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_AdmUserID.Text = dataGridView_AdUser.CurrentRow.Cells[0].Value.ToString();
                textBox_AdmUserFName.Text = dataGridView_AdUser.CurrentRow.Cells[1].Value.ToString();
                textBox_AdmUserLName.Text = dataGridView_AdUser.CurrentRow.Cells[2].Value.ToString();
                textBox_AdmUserAccess.Text = dataGridView_AdUser.CurrentRow.Cells[3].Value.ToString();
                textBox_AdmUserPassword.Text = dataGridView_AdUser.CurrentRow.Cells[4].Value.ToString();
                button_AdUserSave.Enabled = true;
                
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }
        }

        /// <summary>
        /// Öppnar upp fälten för att kunna registrera en ny användare
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdmUserNew_Click(object sender, EventArgs e)
        {
            try
            {
                button_AdmUserNew.Enabled = false;
                int tempId = staff.GetStaffId();
                textBox_AdmUserID.Text = tempId.ToString();
                textBox_AdmUserFName.ReadOnly = false;
                textBox_AdmUserLName.ReadOnly = false;
                textBox_AdmUserAccess.ReadOnly = false;
                textBox_AdmUserPassword.ReadOnly = false;
                button_AdUserSave.Enabled = true;                
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + ex);
            }
        }

        /// <summary>
        /// Sparar uppgifter för antingen ny användare eller befintlig användare
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdUserSave_Click(object sender, EventArgs e)
        {
            try
            {  // Kontrollerar att alla fält är ifyllda
                if (textBox_AdmUserID.Text == " ")
                { MessageBox.Show("Det finns inget AnvändarId angivet"); }
                else if (textBox_AdmUserFName.Text == "" || errorhand.OnlyLetters(textBox_AdmUserFName.Text) == false)
                { MessageBox.Show("Du måste ange användarens förnamn (enbart bokstäver tillåtna)"); }
                else if (textBox_AdmUserLName.Text == "" || errorhand.OnlyLetters(textBox_AdmUserLName.Text) == false)
                { MessageBox.Show("Du måste ange användarens efternamn (enbart bokstäver tillåtna)"); }
                else if (textBox_AdmUserAccess.Text == "" || int.Parse(textBox_AdmUserAccess.Text) < 0 || int.Parse(textBox_AdmUserAccess.Text) > 4)
                { MessageBox.Show("Du måste ange rätt värde i behörighet (mer information under knappen information)"); }
                else if (textBox_AdmUserPassword.Text == "")
                { MessageBox.Show("Du måste ange ett lösenord"); }
                else
                {
                    int tempId = int.Parse(textBox_AdmUserID.Text);
                    string tempFName = textBox_AdmUserFName.Text;
                    string tempLName = textBox_AdmUserLName.Text;
                    string tempAccess = textBox_AdmUserAccess.Text;
                    string tempPassword = textBox_AdmUserPassword.Text;

                    if (button_AdmUserNew.Enabled == true) //Kontrollerar om det är en ny användare som skall registreras. 
                    {
                        LOGIC.LogicStaff.ChangedStaff(tempId, tempFName, tempLName, tempAccess, tempPassword);
                    }
                    else
                    {
                        staff = LOGIC.LogicStaff.NewStaff(tempFName, tempLName, tempAccess, tempPassword);
                    }

                    button_AdmUserNew.Enabled = true;
                    button_AdUserSave.Enabled = false;
                    textBox_AdmUserID.Clear();
                    textBox_AdmUserFName.Clear();
                    textBox_AdmUserLName.Clear();
                    textBox_AdmUserAccess.Clear();
                    textBox_AdmUserPassword.Clear();

                    FillTables();
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Behörigheten får enbart vara siffror mellan 0-4");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }

        }

        /// <summary>
        /// Visar messagebox med behörighetsnivåer
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdUserAccess_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Behörighetsnivåer: \n 0 = Ej behörig  \n 1 = Bokning \n 2 = Skidshop \n 3 = Priser, gäster och statistik \n 4 = Administration");
        }

        /// <summary>
        /// Fyller tabellerna med alla användare, gäster och företagsgäster
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdUserShowAll_Click(object sender, EventArgs e)
        {
            try
            {
                FillTables();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + ex);
            }
        }
        #endregion
        //******************************************************************************Gästhantering***********************************************************************************//
        #region
        /// <summary>
        /// Söker efter privatgäster på valt alternativ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdPGuestSearch_Click(object sender, EventArgs e)
        {
            try
            {
                if (comboBox_AdPGuestAlt.SelectedIndex == -1)
                {
                    MessageBox.Show("Du måste välja ett sökalternativ");
                }
                else if (comboBox_AdPGuestAlt.SelectedIndex == 0) // Söker på privatgäst via gästnummer
                {
                    int tempId = int.Parse(textBox_AdPGuestSearch.Text);
                    dataGridView_AdPGuest.DataSource = privateGuest.GetGuestById(tempId);
                }
                else if (comboBox_AdPGuestAlt.SelectedIndex == 1) // Söker på privatgäst via förnamn
                {
                    string tempFName = textBox_AdPGuestSearch.Text;
                    dataGridView_AdPGuest.DataSource = privateGuest.GetGuestByFName(tempFName);
                }
                else if (comboBox_AdPGuestAlt.SelectedIndex == 2) // Söker på privatgäst via efternamn
                {
                    string tempLName = textBox_AdPGuestSearch.Text;
                    dataGridView_AdPGuest.DataSource = privateGuest.GetGuestByLName(tempLName);
                }
                else // Söker på privatgäst via både för- och efternamn
                {
                    string tempName = textBox_AdPGuestSearch.Text;
                    string[] tempNameSplit = tempName.Split(' ');
                    string tempFName = tempNameSplit[0];
                    string tempLName = tempNameSplit[1];
                    dataGridView_AdPGuest.DataSource = privateGuest.GetGuestByName(tempLName, tempFName);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Felaktigt värde i sökrutan");
            }
        }

        /// <summary>
        /// Fyller i vald gästs uppgifter i matchande textboxar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_AdGuest_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_AdmPGuestId.Text = dataGridView_AdPGuest.CurrentRow.Cells[0].Value.ToString();
                textBox_PGuestCredit.Text = dataGridView_AdPGuest.CurrentRow.Cells[7].Value.ToString();
                textBox_PGuestDiscount.Text = dataGridView_AdPGuest.CurrentRow.Cells[8].Value.ToString();                
            }
            catch (Exception)
            {
                MessageBox.Show("Du kan ej infoga en tom rad");
            }
        }

        /// <summary>
        /// Sparar de uppdaterade uppgifterna på vald gäst
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdPGuestSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox_AdmPGuestId.Text == "")
                { MessageBox.Show("Du måste välja en gäst att ändra"); }
                else if (errorhand.OnlyNumbers(textBox_PGuestDiscount.Text) == false)
                { MessageBox.Show("Du får enbart ange siffor"); }
                else if (errorhand.OnlyNumbers(textBox_PGuestCredit.Text) == false)
                { MessageBox.Show("Du får enbart ange siffor"); }
                else
                {
                    int tempId = int.Parse(textBox_AdmPGuestId.Text);
                    int tempDiscount = int.Parse(textBox_PGuestDiscount.Text);
                    int tempCredit = int.Parse(textBox_PGuestCredit.Text);
                    LOGIC.LogicPrivateGuest.ChangedGuest(tempId, tempDiscount, tempCredit);
                    textBox_AdmPGuestId.Clear();
                    textBox_PGuestCredit.Clear();
                    textBox_PGuestDiscount.Clear();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + ex); 
            }
            
        }

        /// <summary>
        /// Fyller tabellerna med alla användare, privat- och företagsgäster
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdPGuestShowAll_Click(object sender, EventArgs e)
        {
            try
            {
                FillTables();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + ex);
            }
        }


        /// <summary>
        /// Söker efter företagsgäster på valt alternativ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdCGuestSearch_Click(object sender, EventArgs e)
        {
            try
            {
                if (comboBox_AdCGuestAlt.SelectedIndex == -1)
                {
                    MessageBox.Show("Du måste välja ett sökalternativ");
                }
                else if (comboBox_AdCGuestAlt.SelectedIndex == 0) // Söker på företagsgäst via gästnummer
                {
                    int tempId = int.Parse(textBox_AdCGuestSearch.Text);
                    dataGridView_AdCoGuest.DataSource = companyGuest.GetCoGuestById(tempId);
                }
                else if (comboBox_AdCGuestAlt.SelectedIndex == 1) // Söker på företagsgäst via organisationsnummer
                {
                    string tempOrgNr = textBox_AdCGuestSearch.Text;
                    dataGridView_AdCoGuest.DataSource = companyGuest.GetCoGuestOrgNr(tempOrgNr);
                }
                else if (comboBox_AdCGuestAlt.SelectedIndex == 2) // Söker på företagsgäst via företagsnamn
                {
                    string tempCoName = textBox_AdCGuestSearch.Text;
                    dataGridView_AdCoGuest.DataSource = companyGuest.GetCoGuestName(tempCoName);
                }

            }
            catch (Exception)
            {
                MessageBox.Show("Felaktigt värde i sökrutan");
            }
        }

        /// <summary>
        /// Fyller i vald gästs uppgifter i matchande textboxar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_AdCoGuest_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_AdCGuestNr.Text = dataGridView_AdCoGuest.CurrentRow.Cells[0].Value.ToString();
                textBox_AdCGuestCredit.Text = dataGridView_AdCoGuest.CurrentRow.Cells[8].Value.ToString();
                textBox_AdCGuestDiscount.Text = dataGridView_AdCoGuest.CurrentRow.Cells[9].Value.ToString();
                
            }
            catch (Exception)
            {
                MessageBox.Show("Du kan ej infoga en tom rad");
            }
        }

        /// <summary>
        /// Sparar de uppdaterade uppgifterna på vald gäst
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdCGuestSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox_AdCGuestNr.Text == "")
                { MessageBox.Show("Du måste välja en gäst att ändra"); }
                else if (errorhand.OnlyNumbers(textBox_AdCGuestDiscount.Text) == false)
                { MessageBox.Show("Du får enbart ange siffor"); }
                else if (errorhand.OnlyNumbers(textBox_AdCGuestCredit.Text) == false)
                { MessageBox.Show("Du får enbart ange siffor"); }
                else
                {
                    int tempId = int.Parse(textBox_AdCGuestNr.Text);
                    int tempDiscount = int.Parse(textBox_AdCGuestDiscount.Text);
                    int tempCredit = int.Parse(textBox_AdCGuestCredit.Text);
                    LOGIC.LogicCompanyGuest.ChangedGuest(tempId, tempDiscount, tempCredit);
                    textBox_AdCGuestNr.Clear();
                    textBox_AdCGuestCredit.Clear();
                    textBox_AdCGuestDiscount.Clear();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + ex);
            }
            
        }

        /// <summary>
        /// Fyller tabellerna med användare, privat- och företagsgäster
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdCGuestShowAll_Click(object sender, EventArgs e)
        {
            try
            {
                FillTables();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + ex);
            }
        }


        #endregion
        //********************************************************************************* Logi och konferens ***************************************************************************//
        #region
        /// <summary>
        /// Söker efter logier på vald vecka och typ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdLogSearch_Click(object sender, EventArgs e)
        {
            try
            {
                if (comboBox_AdLogAlt.SelectedIndex == -1)
                {
                    MessageBox.Show("Du måste ange en logityp");
                }
                else if (comboBox_AdLogWeek.SelectedIndex == -1)
                {
                    MessageBox.Show("Du måste ange en vecka");
                }
                else
                {
                    string temptype = comboBox_AdLogAlt.Text;
                    int tempWeek = int.Parse(comboBox_AdLogWeek.Text);
                    dataGridView_AdLodging.Enabled = true;
                    dataGridView_AdLodging.DataSource = curLodging.GetLodgingPrice(temptype, tempWeek);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }
            
        }

        /// <summary>
        /// Fyller i vald logis uppgifter i matchande textboxar, vid dubbelklickning, för att kunna utföra ändringar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_AdLodging_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_AdLogType.Text = dataGridView_AdLodging.CurrentRow.Cells[0].Value.ToString();
                textBox_AdLogWeek.Text = dataGridView_AdLodging.CurrentRow.Cells[1].Value.ToString();
                textBox_AdLogPeriod.Text = dataGridView_AdLodging.CurrentRow.Cells[2].Value.ToString();
                textBox_AdLogOldPrice.Text = dataGridView_AdLodging.CurrentRow.Cells[3].Value.ToString();
            }
            catch (Exception)
            {
                MessageBox.Show("Du kan ej infoga en tom rad");
            }

        }
        
        /// <summary>
        /// Sparar ändrat pris för vald logityp, vecka och period
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdLogSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox_AdLogNewPrice.Text == "")
                {
                    MessageBox.Show("Du måste fylla i ett nytt pris innan du sparar");
                }
                else if (errorhand.OnlyNumbers(textBox_AdLogNewPrice.Text) == false)
                { MessageBox.Show("Du får enbart ange siffor"); }
                else
                {
                    string tempType = textBox_AdLogType.Text;
                    int tempWeek = int.Parse(textBox_AdLogWeek.Text);
                    string tempPeriod = textBox_AdLogPeriod.Text;
                    int tempPrice = int.Parse(textBox_AdLogNewPrice.Text);
                    LOGIC.LogicLodging.ChangedLodgPrice(tempType, tempWeek, tempPeriod, tempPrice);
                    textBox_AdLogType.Clear();
                    textBox_AdLogWeek.Clear();
                    textBox_AdLogPeriod.Clear();
                    textBox_AdLogOldPrice.Clear();
                    textBox_AdLogNewPrice.Clear();
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Det får enbart vara siffror i priset");
            }

            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }
        }

        /// <summary>
        /// Söker efter konferensrum på vald vecka och typ
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdConSearch_Click(object sender, EventArgs e)
        {
            try
            {
                if (comboBox_AdConfAlt.SelectedIndex == -1)
                {
                    MessageBox.Show("Du måste ange en konferenstyp");
                }
                else if (comboBox_AdConfWeek.SelectedIndex == -1)
                {
                    MessageBox.Show("Du måste ange en vecka");
                }
                else
                {
                    string temptype = comboBox_AdConfAlt.Text;
                    int tempWeek = int.Parse(comboBox_AdConfWeek.Text);
                    dataGridView_AdConference.Enabled = true;
                    dataGridView_AdConference.DataSource = curConference.GetConferencePrices(temptype, tempWeek);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }
        }

        /// <summary>
        /// Fyller i vald konferenstyps uppgifter i matchande textboxar för att kunna utföra ändringar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_AdConference_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_AdConfType.Text = dataGridView_AdConference.CurrentRow.Cells[0].Value.ToString();
                textBox_AdConfWeek.Text = dataGridView_AdConference.CurrentRow.Cells[1].Value.ToString();
                textBox_AdConfPeriod.Text = dataGridView_AdConference.CurrentRow.Cells[2].Value.ToString();
                textBox_AdConfOldPrice.Text = dataGridView_AdConference.CurrentRow.Cells[3].Value.ToString();
            }
            catch (Exception)
            {
                MessageBox.Show("Du kan ej infoga en tom rad");
            }
        }


        /// <summary>
        /// Sparar nytt pris för vald konferenstyp, vecka samt period.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdConfSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox_AdConfNewPrice.Text == "")
                { MessageBox.Show("Du måste fylla i ett nytt pris innan du sparar"); }
                else if (errorhand.OnlyNumbers(textBox_AdConfNewPrice.Text) == false)
                { MessageBox.Show("Du får enbart ange siffor"); }
                else
                {
                    string tempType = textBox_AdConfType.Text;
                    int tempWeek = int.Parse(textBox_AdConfWeek.Text);
                    string tempPeriod = textBox_AdConfPeriod.Text;
                    int tempPrice = int.Parse(textBox_AdConfNewPrice.Text);
                    LOGIC.LogicConference.ChangedConfPrice(tempType, tempWeek, tempPeriod, tempPrice);
                    textBox_AdConfType.Clear();
                    textBox_AdConfWeek.Clear();
                    textBox_AdConfPeriod.Clear();
                    textBox_AdConfOldPrice.Clear();
                    textBox_AdConfNewPrice.Clear();
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Det får enbart vara siffror i priset");
            }

            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex); 
            }
        }
        #endregion
        //********************************************************************************Utrustning/Skidskola*****************************************************************************//
        #region
        /// <summary>
        /// Söker efter utrustningstyp utefter det val som gjorts och visar alla instanser av denna i datagridview
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdEquSearch_Click(object sender, EventArgs e)
        {
            try
            {
                string temptype = comboBox_AdEquType.Text;

                if (temptype == "")
                {
                    MessageBox.Show("Du måste ange en utrusningstyp");
                }
                else
                {
                    dataGridView_AdEquipment.Enabled = true;
                    dataGridView_AdEquipment.DataSource = equipment.GetEquipment(temptype);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }
        }

        /// <summary>
        /// Fyller i vald utrustningsperiods uppgifter i matchande textboxar, vid dubbelklickning, för att kunna utföra ändringar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_AdEquipment_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_AdEquType.Text = dataGridView_AdEquipment.CurrentRow.Cells[0].Value.ToString();
                textBox_AdEquPeriod.Text = dataGridView_AdEquipment.CurrentRow.Cells[1].Value.ToString();
                textBox_AdEquOldPrice.Text = dataGridView_AdEquipment.CurrentRow.Cells[2].Value.ToString();
            }
            catch (Exception)
            {
                MessageBox.Show("Du kan ej infoga en tom rad");
            }
        }

        /// <summary>
        /// Metod som skickar vidare det nya priset för utrustningstypen och perioden för att sparar det
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdEquSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox_AdEquNewPrice.Text == "")
                {
                    MessageBox.Show("Du måste fylla i ett nytt pris innan du sparar");
                }
                else if (errorhand.OnlyNumbers(textBox_AdEquNewPrice.Text) == false)
                { MessageBox.Show("Du får enbart ange siffor"); }
                else
                {
                    string tempType = textBox_AdEquType.Text;
                    string tempPeriod = textBox_AdEquPeriod.Text;
                    int tempPrice = int.Parse(textBox_AdEquNewPrice.Text);
                    LOGIC.LogicEquipment.ChangedEquipPrice(tempType, tempPeriod, tempPrice);
                    textBox_AdEquType.Clear();
                    textBox_AdEquPeriod.Clear();
                    textBox_AdEquOldPrice.Clear();
                    textBox_AdEquNewPrice.Clear();
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Det får enbart vara siffror i priset");
            }

            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }
        }
        
        /// <summary>
        /// Söker efter skidskoletyp utefter det val som gjorts och visar alla instanser av denna i datagridview
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdLessSearch_Click(object sender, EventArgs e)
        {
            try
            {
                if (comboBox_AdmSkiLesson.SelectedIndex == -1)
                {
                    MessageBox.Show("Du måste ange typ av lektion");

                }
                else if (comboBox_AdmSkiLesson.SelectedIndex == 0)
                {
                    dataGridView_AdGroupSkilesson.Enabled = true;
                    dataGridView_AdGroupSkilesson.Visible = true;
                    dataGridView_AdPrivateSkiLesson.Visible = false;
                    dataGridView_AdGroupSkilesson.DataSource = skiclass.GetGroupLesson();
                }
                else
                {
                    dataGridView_AdPrivateSkiLesson.Enabled = true;
                    dataGridView_AdPrivateSkiLesson.Visible = true;
                    dataGridView_AdGroupSkilesson.Visible = false;
                    dataGridView_AdPrivateSkiLesson.DataSource = skiclass.GetPrivateLessons();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }
        }

        /// <summary>
        /// Fyller i vald privatlektions uppgifter i matchande textboxar, vid dubbelklickning, för att kunna utföra ändringar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_AdPrivateSkiLesson_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_AdSkiLessonType.Text = dataGridView_AdPrivateSkiLesson.CurrentRow.Cells[1].Value.ToString();
                textBox_AdSkiLessOldPrice.Text = dataGridView_AdPrivateSkiLesson.CurrentRow.Cells[2].Value.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }
        }

        /// <summary>
        /// Fyller i vald grupplektions uppgifter i matchande textboxar, vid dubbelklickning, för att kunna utföra ändringar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_AdGroupSkilesson_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_AdSkiLessonType.Text = dataGridView_AdGroupSkilesson.CurrentRow.Cells[1].Value.ToString();
                textBox_AdSkiLessPeriod.Text = dataGridView_AdGroupSkilesson.CurrentRow.Cells[2].Value.ToString();
                textBox_AdSkiLessDiffi.Text = dataGridView_AdGroupSkilesson.CurrentRow.Cells[3].Value.ToString();
                textBox_AdSkiLessOldPrice.Text = dataGridView_AdGroupSkilesson.CurrentRow.Cells[4].Value.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }
        }

        /// <summary>
        /// Metod som skickar vidare det nya priset för vald grupp eller privatlektion för att sparar det
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdSkiLessSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox_AdSkiLessNewPrice.Text == "")
                {
                    MessageBox.Show("Du måste ange ett nytt pris");
                }
                else if (errorhand.OnlyNumbers(textBox_AdSkiLessNewPrice.Text) == false)
                { MessageBox.Show("Du får enbart ange siffor"); }
                else if (textBox_AdSkiLessPeriod.Text == "")
                {
                    int tempId = int.Parse(textBox_AdSkiLessonType.Text);
                    int tempPrice = int.Parse(textBox_AdSkiLessNewPrice.Text);
                    LOGIC.LogicSkiclass.ChangedPrivateLesson(tempId, tempPrice);
                    textBox_AdSkiLessonType.Clear();
                    textBox_AdSkiLessOldPrice.Clear();
                    textBox_AdSkiLessNewPrice.Clear();
                }
                else
                {
                    int tempId = int.Parse(textBox_AdSkiLessonType.Text);
                    string tempPeriod = textBox_AdSkiLessPeriod.Text;
                    string tempLevel = textBox_AdSkiLessDiffi.Text;
                    int tempPrice = int.Parse(textBox_AdSkiLessNewPrice.Text);
                    LOGIC.LogicSkiclass.ChangedGroupLesson(tempId, tempPeriod, tempLevel, tempPrice);
                    textBox_AdSkiLessonType.Clear();
                    textBox_AdSkiLessPeriod.Clear();
                    textBox_AdSkiLessDiffi.Clear();
                    textBox_AdSkiLessOldPrice.Clear();
                    textBox_AdSkiLessNewPrice.Clear();
                }
            }
           catch (FormatException)
            {
                MessageBox.Show("Det får enbart vara siffror i priset");
            }

            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }
        }
        #endregion
        //************************************************************************************Budget/Statistik *****************************************************************************//
        #region
        /// <summary>
        /// Skapar nya rader för budgetering om de ej redan finns, annars hämtar den de existerande.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdmBudSearch_Click(object sender, EventArgs e)
        {
            dataGridView_AdBud.Enabled = true;

            if (comboBox_AdmYearBudget.SelectedIndex != -1)
            {
                int year = int.Parse(comboBox_AdmYearBudget.Text);
                int week = int.Parse(comboBox_AdmWeekBudget.Text);
                if (budget.CheckBudgetYearAndWeek(year, week) == false)
                {
                    budget = LOGIC.LogicBudget.Newbudget(year, week, "LGH I");
                    budget = LOGIC.LogicBudget.Newbudget(year, week, "LGH II");
                    budget = LOGIC.LogicBudget.Newbudget(year, week, "Lillbacken");
                    budget = LOGIC.LogicBudget.Newbudget(year, week, "Storbacken");
                    budget = LOGIC.LogicBudget.Newbudget(year, week, "Camp");
                    dataGridView_AdBud.DataSource = budget.GetBudgetByYearAndWeek(year, week);
                }
                else
                {
                    dataGridView_AdBud.DataSource = budget.GetBudgetByYearAndWeek(year, week);
                }
            }
            else MessageBox.Show("Både år och vecka måste vara valt");
        }

        /// <summary>
        /// Läser in vald budgeteringrads värden i textboxar för att kunna lägga till budget belopp
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_AdBud_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                textBox_AdmBudYear.Text = dataGridView_AdBud.CurrentRow.Cells[0].Value.ToString();
                textBox_AdmBudWeek.Text = dataGridView_AdBud.CurrentRow.Cells[1].Value.ToString();
                textBox_AdmBudType.Text = dataGridView_AdBud.CurrentRow.Cells[2].Value.ToString();
                if (dataGridView_AdBud.CurrentRow.Cells[3].Value == null)
                {
                    textBox_AdmBudIncome.Text = "0";
                }
                else
                {
                    textBox_AdmBudIncome.Text = dataGridView_AdBud.CurrentRow.Cells[3].Value.ToString();
                }
            }

            catch (Exception ex)
            {
                MessageBox.Show("Något gick fel" + " " + ex);
            }

        }

        /// <summary>
        /// Metod som sparar nytt budgetbelopp för vald logi eller konferenstyp, år och vecka 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdmSaveBudg_Click(object sender, EventArgs e)
        {
            try
            {
                if (textBox_AdmBudYear.Text == "")
                { MessageBox.Show("Dy måste göra ett val i tabellen"); }
                else if (errorhand.OnlyNumbers(textBox_AdmBudIncome.Text) == false)
                { MessageBox.Show("Du får enbart ange siffor"); }
                else
                {
                    int year = int.Parse(textBox_AdmBudYear.Text);
                    int week = int.Parse(textBox_AdmBudWeek.Text);
                    string type = textBox_AdmBudType.Text;
                    int budget = int.Parse(textBox_AdmBudIncome.Text);

                    LOGIC.LogicBudget.ChangeBudget(year, week, type, budget);
                    textBox_AdmBudYear.Clear();
                    textBox_AdmBudWeek.Clear();
                    textBox_AdmBudType.Clear();
                    textBox_AdmBudIncome.Clear();
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Du måste fylla i ett budgetbelopp");
            }

        }

        /// <summary>
        /// Metod som visar statistik utifrån de val som gjorts. 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_AdmShowStatistics_Click(object sender, EventArgs e)
        {            
            if (checkBox_AdmBudSeason.Checked)//Statistikvisning utifrån säsong
            {
                if (comboBox_AdmStatSeason.SelectedIndex == -1)
                { MessageBox.Show("Du måste ange en säsong"); }
                else if (comboBox_AdmStatSeason.SelectedIndex == 0)//Statistikvisning när vintersäsong valts
                {
                    if (comboBox_AdmStatTyp.SelectedIndex == 0 || comboBox_AdmStatTyp.SelectedIndex == 1 || comboBox_AdmStatTyp.SelectedIndex == 2) //Kontrollerar om det är logityp som valts för statistikvisning
                    {
                        int fromWeek = 14;//Skickar med föridentifierad tidsintervall
                        int toWeek = 50;
                        int tempYear = 2011;
                        string tempType = comboBox_AdmStatTyp.Text;
                        LOGIC.LogicBudget.SetOccupancyLevelLodging(fromWeek, toWeek, tempYear, tempType);
                        chart_OccupancyLevel.DataSource = budget.GetOccupancyLevelWinter(fromWeek, toWeek, tempYear, tempType);
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].XValueMember = "Vecka";
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].YValueMembers = "Beläggningsgrad";
                        chart_OccupancyLevel.DataBind();
                        chart_OccupancyLevel.Visible = true;
                    }
                    else if (comboBox_AdmStatTyp.SelectedIndex == 3 || comboBox_AdmStatTyp.SelectedIndex == 4) // kontrollerar om det är konferenstyp som valts för statistikvisning
                    {
                        int fromWeek = 14;//Skickar med föridentifierad tidsintervall
                        int toWeek = 50;
                        int tempYear = 2011;
                        string tempType = comboBox_AdmStatTyp.Text;
                        LOGIC.LogicBudget.SetOccupancyLevelConference(fromWeek, toWeek, tempYear, tempType);
                        chart_OccupancyLevel.DataSource = budget.GetOccupancyLevelWinter(fromWeek, toWeek, tempYear, tempType);
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].XValueMember = "Vecka";
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].YValueMembers = "Beläggningsgrad";
                        chart_OccupancyLevel.DataBind();
                        chart_OccupancyLevel.Visible = true;
                    }
                }

                else if (comboBox_AdmStatSeason.SelectedIndex == 1)//Statistikvisning när sommarsäsong valts
                {
                    if (comboBox_AdmStatTyp.SelectedIndex == 0 || comboBox_AdmStatTyp.SelectedIndex == 1 || comboBox_AdmStatTyp.SelectedIndex == 2)//Kontrollerar om det är logityp som valts för statistikvisning
                    {
                        int fromWeek = 14;
                        int toWeek = 50;
                        int tempYear = 2011;
                        string tempType = comboBox_AdmStatTyp.Text;
                        LOGIC.LogicBudget.SetOccupancyLevelLodging(fromWeek, toWeek, tempYear, tempType);
                        chart_OccupancyLevel.DataSource = budget.GetOccupancyLevel(fromWeek, toWeek, tempYear, tempType);
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].XValueMember = "Vecka";
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].YValueMembers = "Beläggningsgrad";
                        chart_OccupancyLevel.DataBind();
                        chart_OccupancyLevel.Visible = true;
                    }
                    else if (comboBox_AdmStatTyp.SelectedIndex == 3 || comboBox_AdmStatTyp.SelectedIndex == 4)// kontrollerar om det är konferenstyp som valts för statistikvisning
                    {
                        int fromWeek = 14;
                        int toWeek = 50;
                        int tempYear = 2011;
                        string tempType = comboBox_AdmStatTyp.Text;
                        LOGIC.LogicBudget.SetOccupancyLevelConference(fromWeek, toWeek, tempYear, tempType);
                        chart_OccupancyLevel.DataSource = budget.GetOccupancyLevel(fromWeek, toWeek, tempYear, tempType);
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].XValueMember = "Vecka";
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].YValueMembers = "Beläggningsgrad";
                        chart_OccupancyLevel.DataBind();
                        chart_OccupancyLevel.Visible = true;
                    }
                }
                
            }
            else if (checkBox_AdmBudgWeek.Checked)// Statistikvisning utifrån veckor
            {                
                if (comboBox_AdmFromWeekStat.SelectedIndex == -1 || comboBox_AdmToWeekStat.SelectedIndex == -1)// Kontrollerar att veckor har valts
                { MessageBox.Show("Du måste ange en från och en till vecka"); }
                else if (comboBox_AdmStatYear.SelectedIndex == -1) // kontrollerar att år har valts
                { MessageBox.Show("Du måste ange ett årtal"); }
                else
                {
                    if (comboBox_AdmStatTyp.SelectedIndex == -1)
                    {MessageBox.Show("Du måste ange typ");}
                    else if (comboBox_AdmStatTyp.SelectedIndex == 0 || comboBox_AdmStatTyp.SelectedIndex == 1 || comboBox_AdmStatTyp.SelectedIndex == 2)//Kontrollerar om det är logityp som valts för statistikvisning
                    {
                        int fromWeek = int.Parse(comboBox_AdmFromWeekStat.Text);
                        int toWeek = int.Parse(comboBox_AdmToWeekStat.Text);
                        int tempYear = int.Parse(comboBox_AdmStatYear.Text);
                        string tempType = comboBox_AdmStatTyp.Text;
                        LOGIC.LogicBudget.SetOccupancyLevelLodging(fromWeek, toWeek,tempYear, tempType);                        
                        chart_OccupancyLevel.DataSource = budget.GetOccupancyLevel(fromWeek, toWeek, tempYear, tempType);
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].XValueMember = "Vecka";
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].YValueMembers = "Beläggningsgrad";
                        chart_OccupancyLevel.DataBind();
                        chart_OccupancyLevel.Visible = true;
                    }
                    else if (comboBox_AdmStatTyp.SelectedIndex == 3 || comboBox_AdmStatTyp.SelectedIndex == 4)// kontrollerar om det är konferenstyp som valts för statistikvisning
                    {
                        int fromWeek = int.Parse(comboBox_AdmFromWeekStat.Text);
                        int toWeek = int.Parse(comboBox_AdmToWeekStat.Text);
                        int tempYear = int.Parse(comboBox_AdmStatYear.Text);
                        string tempType = comboBox_AdmStatTyp.Text;
                        LOGIC.LogicBudget.SetOccupancyLevelConference(fromWeek, toWeek, tempYear, tempType);
                        chart_OccupancyLevel.DataSource = budget.GetOccupancyLevel(fromWeek, toWeek, tempYear, tempType);
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].XValueMember = "Vecka";
                        chart_OccupancyLevel.Series["Beläggningsgrad (%)"].YValueMembers = "Beläggningsgrad";
                        chart_OccupancyLevel.DataBind();
                        chart_OccupancyLevel.Visible = true;
                    }                    
                }                
            }
        }

        /// <summary>
        /// Metod som visar eller gömmer de allternativ som skall fyllas i för att visa statistik
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void checkBox_AdmOccupancyLevel_CheckedChanged(object sender, EventArgs e)//Visar/gömmer de knappar/fält som skall/inte ska visas.
        {
            if (checkBox_AdmOccupancyLevel.Checked)
            {
                groupBox_Period.Visible = true;
                groupBox_typ.Visible = true;
                button_AdmShowStatistics.Visible = true;
            }
            else
            {
                groupBox_Period.Visible = false;
                groupBox_typ.Visible = false;
                button_AdmShowStatistics.Visible = false;
                comboBox_AdmStatSeason.Visible = false;
                label_AdmStatFromWeek.Visible = false;
                label_AdmStatToWeek.Visible = false;
                comboBox_AdmFromWeekStat.Visible = false;
                comboBox_AdmToWeekStat.Visible = false;
                comboBox_AdmStatYear.Visible = false;
                label_AdmStatYear.Visible = false;
            }

        }

        /// <summary>
        /// Metod som  visar/gömmer dropdown listan för val av säsong.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void checkBox_AdmBudSeason_CheckedChanged(object sender, EventArgs e)//Visar/gömmer de knappar/fält som skall/inte ska visas.
        {
            if (checkBox_AdmBudSeason.Checked)
            {
                comboBox_AdmStatSeason.Visible = true;
                checkBox_AdmBudgWeek.Checked = false;
            }
            else
            {
                comboBox_AdmStatSeason.Visible = false;
            }
        }

        /// <summary>
        /// Metod som visar/gömmer dropdown listor för val av veckor och år.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void checkBox_AdmBudgWeek_CheckedChanged(object sender, EventArgs e)//Visar/gömmer de knappar/fält som skall/inte ska visas.
        {
            if (checkBox_AdmBudgWeek.Checked)
            {
                comboBox_AdmFromWeekStat.Visible = true;
                comboBox_AdmToWeekStat.Visible = true;
                label_AdmStatFromWeek.Visible = true;
                label_AdmStatToWeek.Visible = true;
                comboBox_AdmStatYear.Visible = true;
                label_AdmStatYear.Visible = true;
                checkBox_AdmBudSeason.Checked = false;
            }
            else
            {
                comboBox_AdmFromWeekStat.Visible = false;
                comboBox_AdmToWeekStat.Visible = false;
                label_AdmStatFromWeek.Visible = false;
                label_AdmStatToWeek.Visible = false;
                comboBox_AdmStatYear.Visible = false;
                label_AdmStatYear.Visible = false;
            }
        }
        #endregion        
        //******************************************************************************** Huvudmeny funktioner ****************************************************************************//
        #region
        /// <summary>
        /// Metod som avslutar programmet
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void avslutaToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            DialogResult result;
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            result = MessageBox.Show("Är du säker på att du vill avsluta?" , "Viktigt", buttons);
            if (result == DialogResult.Yes)
            { Application.Exit(); }
        }

        /// <summary>
        /// Metod som loggar ut användaren ur systemet
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void avslutaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult result;
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            result = MessageBox.Show("Är du säker på att du vill logga ut?", "Viktigt", buttons);
            if (result == DialogResult.Yes)
            {
                this.Close();
                if (Application.OpenForms.OfType<CLRS_Inloggning>().Count() == 0)
                {
                    CLRS_Inloggning loadInlog = new CLRS_Inloggning();
                    loadInlog.ShowDialog();
                }
            }
        }


        /// <summary>
        /// Metod som öppnar logifönstret
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void logiToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Application.OpenForms.OfType<Lodging>().Count() == 0)
            {
                Lodging loadLodging = new Lodging();
                loadLodging.ShowDialog();
            }
            else
            {
                MessageBox.Show("Fönstret är redan öppet");
            }
        }

        /// <summary>
        /// Metod som öppnar skidshopsfönstret
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void skidshopToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Application.OpenForms.OfType<Skishop>().Count() == 0)
            {
                Skishop loadSkishop = new Skishop();
                loadSkishop.ShowDialog();
            }
            else
            {
                MessageBox.Show("Fönstret är redan öppet");
            }
        }

        #endregion


    }
}
